class Component:
    def __init__(self, name: str):
        self.name = name
        self.children = []

    def add(self, component: 'Component'):
        self.children.append(component)

    def remove(self, component: 'Component'):
        self.children.remove(component)

    def display(self, depth: int) -> None:
        # Note: This is an abstract method in the sense that it should be overridden
        # by subclasses to provide specific implementation.
        raise NotImplementedError("Subclasses should implement this method.")

class ConcreteImplementorB(Component):  # This could be named Leaf or ConcreteLeaf in a typical Composite Pattern
    def __init__(self, name: str):
        super().__init__(name)

    def display(self, depth: int) -> None:
        print(' ' * depth + f"{self.name}")

class Composite(Component):
    def __init__(self, name: str):
        super().__init__(name)

    def display(self, depth: int) -> None:
        print(' ' * depth + f"+-- {self.name}")
        for child in self.children:
            child.display(depth + 4)

# Client code
if __name__ == "__main__":
    # Create some leaf nodes
    leaf1 = ConcreteImplementorB("Leaf 1")
    leaf2 = ConcreteImplementorB("Leaf 2")

    # Create a composite node and add leaf nodes to it
    composite = Composite("Composite")
    composite.add(leaf1)
    composite.add(leaf2)

    # Optionally, create another composite node and add the first composite as a child
    root_composite = Composite("Root Composite")
    root_composite.add(composite)

    # Display the structure
    root_composite.display(0)